<?php

namespace Frontend;

use BaseController,
    View,
    MyModel,
    Input,
    Dictionary,
    Category,
    Str,
    DB,
    Validator,
    Redirect;

class DictionaryController extends BaseController {

    public function getIndex() {
        $words = Dictionary::where('status', '=', 'published')
                        ->select('id', 'title')
                        ->orderBy('title', 'ASC')
                        ->get()->toArray();
        $data['alphabs'] = (new Dictionary)->Listword_Left();
        return View::make('frontend/dictionary/index', compact('data'));
    }

//Từ điển danh mục
    public function getDictionaryCategory($id) {
        if (is_null($category_lv0 = Category::find($id)))
            return Redirect::route('tu-dien')->with('error', 'Nội dung không tồn lại');
        $data['category_lv0'] = $category_lv0;
        $categories_lv1 = Category::where('parent_id', '=', $category_lv0->id)->Lists('id', 'title');
        $data['listcategories'] = array();
        if (count($categories_lv1) > 0) {
            $categories_lv2 = Category::whereIn('parent_id', $categories_lv1)->select('id', 'title', 'parent_id')->get()->toArray();
            foreach ($categories_lv1 as $key_lv1 => $category_lv1) {
                $array_categories = array();
                foreach ($categories_lv2 as $key => $category_lv2) {
                    if ($category_lv2['parent_id'] == $category_lv1) {
                        array_push($array_categories, $category_lv2);
                        unset($categories_lv2[$key]);
                    }
                }
                array_push($data['listcategories'], array(array($key_lv1, $category_lv1), $array_categories));
            }
        }
//danh sách các từ trong danh mục được chọn xếp theo thứ tự alphab
        $listid = array();
        $array1[] = $category_lv0->id;
        $listid = $category_lv0->dequy($array1, array());
        $words_alphb = Dictionary::wherein('category_id', $listid)
                        ->where('status', '=', 'published')
                        ->select('id', 'title')
                        ->orderBy('title', 'ASC')
                        ->get()->toArray();
        $data['alphabs'] = (new Dictionary)->listDataArrangement($words_alphb);
        Return View::make('frontend/dictionary/CategoryDictionary', compact('data'));
    }

//chi tiết từ điển
    public function getDetail($id, $name) {

//Thông tin từ điển chi tiết
        $data['dictionary'] = Dictionary::leftjoin('categories', 'categories.id', '=', 'dictionaries.category_id')
                        ->where('dictionaries.id', '=', $id)
                        ->where('dictionaries.status', '=', 'published')
                        ->select('dictionaries.*', 'categories.title AS category_title')
                        ->get()->first();
        if (is_null($data['dictionary']))
            return Redirect::route('tu-dien')->with('error', 'Nội dung không tồn lại');
//Danh sách danh mục cha của từ điển
        $data['listparent'] = array();
        $data['listparent'] = (new Dictionary)->Listcategories($data['dictionary']->category_id, $data['listparent']);

        Return View::make('frontend/dictionary/detaildictionary', compact('data'));
    }

//Tạo từ điển
    public function getCreate() {
        $data['categories'] = \Category::
                where('type', '=', 'dictionary')
                ->lists('title', 'id');
        Return View::make('frontend/dictionary/createdictionary', array('data' => $data));
    }

    public function postCreate() {
        $data = Input::get('data');
        $rules = array('title' => 'unique:dictionaries');
        $validation = Validator::make($data['Dictionary'], $rules);
        if ($validation->fails())
            return Redirect::back()->withInput()->withErrors($validation);
        $mymodel = new MyModel();
        try {
            $dictionary = $mymodel->saveItem("Dictionary", $data['Dictionary'], array('return' => 'class'));
            Return Redirect::route('tu-dien-chi-tiet', array('id' => $dictionary->id, 'name' => Str::slug($dictionary->title)));
        } catch (Exception $ex) {
            Return Redirect::back()->withInput()->withErrors($ex);
        }
    }

//search
    public function getListSearch() {
        $data['first'] = Input::get('first');
        $data['word'] =Input::get('searchword');
        if($data['word']==''&&$data['first']==''){
           Return Redirect::back();
        }
        $listword = Dictionary::where('status', '=', 'published')
                        ->where(function($where) use ($data) {
                            if ($data['first'] != '') {
                                if ($data['first'] == 'number') {
                                    $where->where('title', 'regexp', '^[0-9]');
                                } else {
                                    $where->where('title', 'like', $data['first'] . "%");
                                }
                            } else {
                                $where->where('title', 'like', "%" . $data['word'] . "%");
                            }
                        })
                        ->select('id', 'title')
                        ->orderBy('title', 'ASC')
                        ->get()->toArray();
        $data['alphabs'] = (new Dictionary())->listDataArrangement($listword);
        Return View::make('frontend/dictionary/listsearch', compact('data'));
    }

    public function postRequest() {
        $data = Input::all();
        if (!is_null($data['search_word'])) {
            $rules = array('search_word' => 'required|unique:dictionaries,title');
            $messages = array('search_word.unique' => " Từ này đã tồn tại!!!",
                'search_word.required' => 'Bạn chưa nhập từ yêu cầu');
            $validation = Validator::make($data, $rules, $messages);
            if ($validation->fails()) {
                return Redirect::back()->withInput()->withErrors($validation);
            }
            $dictionary = new \Dictionary;
            $dictionary->title = $data['search_word'];
            $dictionary->status = "request";
            if ($dictionary->save()) {
                Return Redirect::back()->with('request_success', 'Yêu cầu của bạn đã được gửi');
            } else
                Return Redirect::back();
        }
    }

  

}
